package com.estagio.bean;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.primefaces.context.RequestContext;

import com.estagio.entity.CondicaoPagamento;
import com.estagio.entity.ContaPagar;
import com.estagio.entity.Fornecedor;
import com.estagio.session.CondicaoPagamentoSession;
import com.estagio.session.ContaPagarSession;
import com.estagio.session.FornecedorSession;

@ManagedBean(name="contaPagarBean")
@SessionScoped
public class ContaPagarBean {
	
	//VENDA
	private ContaPagar contaPagar = new ContaPagar();
	private ContaPagar contaPagarSave = new ContaPagar();
	private DataModel dmContaPagar;
	private Double somaValorTotal;
	

	
	//CONDICAO DE PAGAMENTO
	private CondicaoPagamento condicaoPagamento = new CondicaoPagamento();
	private DataModel dmCondicaoPagamento;
	private List<CondicaoPagamento> arrayCondicaoPagamento;
	
	//ALUNO
	private Fornecedor fornecedor  = new Fornecedor();
	private DataModel dmFornecedor;

	//CONTAS A RECEBER
	private List<ContaPagar> listContaPagar;

	//GETTERS AND SETTERS	
	
	public ContaPagar getContaPagar() {
		return contaPagar;
	}

	public Fornecedor getFornecedor() {
		return fornecedor ;
	}

	public void setFornecedor(Fornecedor fornecedor ) {
		this.fornecedor  = fornecedor ;
	}

	public DataModel getDmFornecedor() {
		return dmFornecedor;
	}

	public void setDmFornecedor(DataModel dmFornecedor) {
		this.dmFornecedor = dmFornecedor;
	}

	public void setContaPagar(ContaPagar contaPagar) {
		this.contaPagar = contaPagar;
	}

	public ContaPagar getContaPagarSave() {
		return contaPagarSave;
	}

	public void setContaPagarSave(ContaPagar contaPagarSave) {
		this.contaPagarSave = contaPagarSave;
	}

	public DataModel getDmContaPagar() {
		return dmContaPagar;
	}

	public void setDmContaPagar(DataModel dmContaPagar) {
		this.dmContaPagar = dmContaPagar;
	}

	public Double getSomaValorTotal() {
		return somaValorTotal;
	}

	public void setSomaValorTotal(Double somaValorTotal) {
		this.somaValorTotal = somaValorTotal;
	}

	
	
	public CondicaoPagamento getCondicaoPagamento() {
		return condicaoPagamento;
	}

	public void setCondicaoPagamento(CondicaoPagamento condicaoPagamento) {
		this.condicaoPagamento = condicaoPagamento;
	}

	public DataModel getDmCondicaoPagamento() {
		return dmCondicaoPagamento;
	}

	public void setDmCondicaoPagamento(DataModel dmCondicaoPagamento) {
		this.dmCondicaoPagamento = dmCondicaoPagamento;
	}

	public List<CondicaoPagamento> getArrayCondicaoPagamento() {
		return arrayCondicaoPagamento;
	}

	public void setArrayCondicaoPagamento(
			List<CondicaoPagamento> arrayCondicaoPagamento) {
		this.arrayCondicaoPagamento = arrayCondicaoPagamento;
	}

	public List<ContaPagar> getListContaPagar() {
		return listContaPagar;
	}

	public void setListContaPagar(List<ContaPagar> listContaPagar) {
		this.listContaPagar = listContaPagar;
	}
	
	//CONTA PAGAR
	public void saveContaPagar() {
		ContaPagarSession session = new ContaPagarSession();
		String mensagem = session.save(this.listContaPagar, null);
		FacesMessage faces = new FacesMessage(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);		
		RequestContext.getCurrentInstance().update("panelManterContaPagar");
		RequestContext.getCurrentInstance().update("growl");

	}

	public String deleteContaPagar() {
		ContaPagarSession contaPagarRN = new ContaPagarSession();		
		ContaPagar contaPagar = this.contaPagarSave;
		String mensagem = contaPagarRN.delete(contaPagar);
		this.contaPagarSave = new ContaPagar();
		FacesMessage faces = new FacesMessage(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);
		return "consultarContaPagar";
	}

	public DataModel findContaPagar() {
		ContaPagarSession contaPagarSession = new ContaPagarSession();
		List<ContaPagar> lista = contaPagarSession.find(this.contaPagar);
		this.dmContaPagar = new ListDataModel(lista);
		return this.dmContaPagar;
	}
	
	public void clean() {
		this.contaPagar = new ContaPagar();
	}
	
	//ALUNO
		public DataModel findFornecedor() {
			FornecedorSession session = new FornecedorSession();
			List<Fornecedor> lista = session.find(this.fornecedor );
			this.dmFornecedor = new ListDataModel(lista);
			RequestContext.getCurrentInstance().update("formConsultarContaPagar:dataTableContaPagar");
			return this.dmFornecedor;
		}
		
		public void selectFornecedor() {
			this.contaPagar.setFornecedor((Fornecedor) this.dmFornecedor.getRowData());
			RequestContext.getCurrentInstance().update("pgFornecedor");
			RequestContext.getCurrentInstance().execute("dialogConsultarFornecedor.hide()");
		}

	
	public void calculaTotalContaPagar() {
		ContaPagarSession sessionCR = new ContaPagarSession();
		this.listContaPagar = sessionCR.validaContaPagar(this.contaPagar);		
		RequestContext.getCurrentInstance().update("pgTotal");
		RequestContext.getCurrentInstance().update("tableParcela");
	}
	
		
	//CONDICAO DE PAGAMENTO
	public DataModel findCondicaoPagamento() {
		List<CondicaoPagamento> listaCondicaoPagamento = new CondicaoPagamentoSession().find(this.condicaoPagamento);
		this.dmCondicaoPagamento = new ListDataModel(listaCondicaoPagamento);
		return this.dmCondicaoPagamento;
	}

	public void selectCondicaoPagamento() {
		CondicaoPagamento condicaoPagamento = (CondicaoPagamento) this.dmCondicaoPagamento.getRowData();
		this.contaPagar.setCondicaoPagamento(condicaoPagamento);
		RequestContext.getCurrentInstance().update("pgCondicaoPagamento");
		RequestContext.getCurrentInstance().update("pgTotal");
		RequestContext.getCurrentInstance().execute("dialogConsultarCondicaoPagamento.hide()");
	}
	
	public Boolean disableCondicao() {
		if((this.somaValorTotal != null) && (this.somaValorTotal != 0)) {
			return false;
		} else {
			return true;
		}
	}

	
	//INVOCAR TELAS
	public String newContaPagar() {
		this.contaPagar = new ContaPagar();
		this.contaPagar.setFornecedor(new Fornecedor());
		this.contaPagar.setCondicaoPagamento(new CondicaoPagamento());
		this.arrayCondicaoPagamento = new ArrayList<CondicaoPagamento>();
		this.contaPagar.setDtPagamento(new Date());
		this.condicaoPagamento = new CondicaoPagamento();
		this.somaValorTotal = 0.00;
		this.listContaPagar = new ArrayList<ContaPagar>();
		return "manterContaPagar";
	}

	public String consultarContaPagar() {
		this.contaPagar = new ContaPagar();
		this.contaPagar.setFornecedor(new Fornecedor());
		return "consultarContaPagar";
	}

	public String editarContaPagar() {
		this.contaPagarSave = (ContaPagar) this.dmContaPagar.getRowData();		
		return "editarContaPagar";
	}
	
	public String excluirContaPagar() {
		this.contaPagarSave = (ContaPagar) this.dmContaPagar.getRowData();
		return "excluirContaPagar";
	}
	
	//DIALOGS
	public void openDialogConsultarCondicaoPagamento() {
		RequestContext.getCurrentInstance().update("idDialogConsultarCondicaoPagamento");
		RequestContext.getCurrentInstance().execute("dialogConsultarCondicaoPagamento.show()");
	}

	public void openDialogConsultarProduto() {
		RequestContext.getCurrentInstance().update("idDialogConsultarProduto");
		RequestContext.getCurrentInstance().execute("dialogConsultarProduto.show()");
	}
	
	public void openDialogConsultarFornecedor() {
		this.fornecedor  = new Fornecedor();
		RequestContext.getCurrentInstance().update("idDialogConsultarFornecedor");
		RequestContext.getCurrentInstance().execute("dialogConsultarFornecedor.show()");
	}
}
